﻿''' <summary>
''' 
''' </summary>
''' <remarks></remarks>
Public Class listeChampsSortieTableIntegrationEncours
    Inherits baseListeChampsSortieTable

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New(ByVal paramInitialisation As Object)
        MyBase.New(paramInitialisation)
    End Sub

    ''' <summary>
    ''' Initialisation de la liste de champs en sortie de la table d'encours. La liste de champs en sortie doit intercepter
    ''' un certain nombre d'évènements survenus sur la table et y réagir (notamment lors d'une modification des
    ''' champs présents en entrée de la table (lorsque le fichier physique rattaché à la table change de nom par exemple)
    ''' </summary>
    ''' <remarks></remarks>
    Public Overrides Function initialise(ByVal sender As Object) As Boolean
        chargeChampsSortieEncours(DirectCast(sender, tableBDD))
        _initHasBeenMade = True
        AddHandler CType(sender, tableBDD).ListeChampsEntreeChanged, AddressOf onTraitement_ListeChampsEntreeChanged
        Return True
    End Function

    Protected Overridable Sub onTraitement_ListeChampsEntreeChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim tableBDDmodifiee As tableBDD = DirectCast(sender, tableBDD)
        If _initHasBeenMade Then
            'Une fois la nouvelle liste de champs en entrée créée, on regarde si la liste de champs en sortie
            'ne contient pas un lien vers une correspondance dont le champ en entrée ne serait plus présent dans la nouvelle
            'liste de champs en entrée. Si c'est le cas, on remet à nothing la formule du champs en sortie
            For Each corresp As Correspondance In Values
                If corresp.typeChEntree = typeChEntreeMapping.TABLE Then
                    Dim aSupprimer = True
                    If tableBDDmodifiee.ListeChampsEntree.ContainsKey(corresp.chBDD.Nom) Then
                        If tableBDDmodifiee.ListeChampsEntree(corresp.chBDD.Nom).chBDD.Format.estEgal(corresp.chBDD.Format) Then
                            aSupprimer = False
                        End If
                    End If
                    If aSupprimer Then
                        corresp.setChEntree(Nothing)
                    End If
                End If
            Next
        End If
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub chargeChampsSortieEncours(ByVal tableBDDmodifiee As tableBDD)
        Dim nomCompletFichier As String = CType(_paramInitialisation, String)
        Clear()
        'Chargement du XML contenant le mapping de la table d'encours
        Dim xmlDoc As Xml.XmlDocument = New Xml.XmlDocument
        ''xmlDoc.Load(csteEmplacementParametrage & "lstMappingEncours.xml")
        xmlDoc.Load(nomCompletFichier)

        'Récupération de la liste des noeuds "CORRESPONDANCE"
        Dim lNoeudCorresp As Xml.XmlNodeList
        lNoeudCorresp = xmlDoc.DocumentElement.GetElementsByTagName("CORRESPONDANCE")

        'Pour chaque élément de la liste des noeuds "CORRESPONDANCE" : 
        '   - récupération des noeuds "DESCRIPTION" et "CHAMPSBDD_CIBLE"
        '   - Création la correspondance associée et ajout de cette correspondance dans le mapping
        Dim noeudCorresp, noeudEnf As Xml.XmlNode
        Dim chCibleEnCours As ChampsBDD = Nothing
        Dim dtTableContraintes As DataTable = Nothing
        Dim description As String = ""
        For Each noeudCorresp In lNoeudCorresp
            dtTableContraintes = New DataTable
            For Each noeudEnf In noeudCorresp.ChildNodes
                If noeudEnf.Name = "CHAMPSBDD_CIBLE" Then
                    Dim formatChCible As New FormatChamps(Type.GetType(noeudEnf.ChildNodes(1).InnerText.Trim()))
                    If noeudEnf.ChildNodes.Count >= 3 Then
                        formatChCible.formatAff = noeudEnf.ChildNodes(2).InnerText.Trim()
                    End If
                    'Création du champs cible en cours à partir des caractéristiques lues dans le XML
                    chCibleEnCours = New ChampsBDD( _
                        noeudEnf.ChildNodes(0).InnerText.Trim(), _
                        formatChCible)

                ElseIf noeudEnf.Name = "DESCRIPTION" Then
                    description = noeudEnf.InnerText.Trim()
                Else
                    'Récupérer les enfants du noeud VAL et alimenter la table des contraintes par
                    'leur intermédiaire.
                    dtTableContraintes.Columns.Add(description, chCibleEnCours.Format.typeStock)
                    For Each c As Xml.XmlNode In noeudEnf.ChildNodes
                        Dim myRow As DataRow = dtTableContraintes.NewRow()
                        myRow(description) = c.InnerText.Trim()
                        dtTableContraintes.Rows.Add(myRow)
                    Next
                End If
            Next
            Add(description, New Correspondance(tableBDDmodifiee, description, chCibleEnCours))
            ''addCorrespFromChCible(description, chCibleEnCours)
            Item(description).ContraintesVal = dtTableContraintes
        Next
        'Ajout des champs de la grille tarifaire et de la table de mortalité (inclus dans la table en entrée
        'dans cette version de l'outil)
    End Sub


End Class
